package io.renren.config;

import io.renren.modules.ws.stomp.AuthChannelInterceptor;
import io.renren.modules.ws.stomp.MyHandShakeInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;


/**
 * Stomp配置
 */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer {
    @Autowired
    private AuthChannelInterceptor authChannelInterceptor;


    // 配置消息代理，哪种路径的消息会进行代理处理
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // 设置订阅Broker名称,/topic为广播模式
        registry.enableSimpleBroker("/topic", "/queue");
        // 设置应用程序全局目标前缀
        registry.setApplicationDestinationPrefixes("/application");
    }

    // 添加这个Endpoint，这样在网页中就可以通过websocket连接上服务,也就是我们配置websocket的服务地址,并且可以指定是否使用socketjs
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 用户订阅主题的前缀 /topic 代表发布广播，即群发 /queue 代表点对点，即发指定用户
        registry.addEndpoint("/stomp/websocket")
                // 设置跨域
                .setAllowedOrigins("*")
                //添加socket拦截器，用于从请求中获取客户端标识参数 目前没什么用，可以去掉
                .addInterceptors(new MyHandShakeInterceptor())
                .withSockJS();
    }

    // 设置输入消息通道的线程数，默认线程为1，可以自己自定义线程数，最大线程数，线程存活时间
    // 添加拦截器
    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.interceptors(authChannelInterceptor);
    }
}
